Convert Float to Int using Assembly Language Programming






2.93/5 (10 votes)
An article on Converting Float value to an integer value trimming off the decimal part
Introduction
This program takes a floating point value as input and converts it into an integer by trimming the decimal point. Please e-mail your suggestion to Jayadev at jayadevmv@rediffmail.com.
Background
The code uses the tag _asm
in VC++. Using the assembly code, the floating point value is converted into an integer value.
Using the Code
The code is very simple and it can be plugged into any other code easily.
The function ftoi
looks like this:
int ftoi(float flt)
{
int i;
_asm
{
mov eax,flt; //loaded mem to acc
rcl eax,1; //left shift acc to remove the sign
mov ebx,eax; //save the acc
mov edx,4278190080; //clear reg edx;
and eax,edx; //and acc to retrieve the exponent
shr eax,24;
sub eax,7fh; //subtract 7fh(127) to get the actual power
mov edx,eax; //save acc val power
mov eax,ebx; //retrieve from ebx
rcl eax,8; //trim the left 8 bits that contain the power
mov ebx,eax; //store
mov ecx, 1fh; //subtract 17 h
sub ecx,edx;
mov edx,00000000h;
cmp ecx,0;
je loop2;
shr eax,1;
or eax,80000000h;
loop1:
shr eax,1; //shift (total bits - power bits);
sub ecx,1;
add edx,1;
cmp ecx,0;
ja loop1;
loop2:
mov i, eax;
//check sign +/-
sign:
mov eax,flt;
and eax,80000000h;
cmp eax,80000000h;
je putsign;
}
return i;
putsign:
return -i;
}
History
- 15th June, 2005: Initial version